import javaobj
import redis


class RedisUtil:
    def __init__(self,host,password,port=6379,decode_responses=False,db=0):
        self.pool =redis.ConnectionPool(
            host=host,
            password=password,
            port=port,
            decode_responses=decode_responses,
            db=db
        )
        self.r=redis.Redis(connection_pool=self.pool)
    def get(self,key):
        type=self.r.type(key).decode('utf-8')
        if type == 'string':
            return self.r.get(key)
        elif type == 'hash':
            return self.r.hgetall(key)
        elif type == 'list':
            return self.r.lrange(key,0,-1)
        elif type == 'set':
            return self.r.smembers(key)
        elif type == 'zset':
            return self.r.zrange(key,0,-1)
        else:
            raise Exception(f'{key}对应的数据类型不支持')
if __name__ == '__main__':
    redis_util=RedisUtil(host='59.36.173.55',password='mtx')
    # res=redis_util.get('{BUY_NOW_ORIGIN_DATA_PREFIX}_7777918')
    # res_py = javaobj.loads(res)
    # print(type(res_py))  # javalist 列表
    # sku_info = res_py[0]  # 得到列表中的第一个产品对象
    # # 这个sku_info对象都有哪些属性信息，可以用dir来获取，也可以通过和开发沟通得到相关业务属性
    # print(dir(sku_info))
    # print(sku_info.__getattribute__('goodsName'))
    # print(sku_info.__getattribute__('skuId'))
    # print(sku_info.__getattribute__('num'))


    #针对收货地址，缓存数据是哈希类型
    res = redis_util.get('{CHECKOUT_PARAM_ID_PREFIX}_7777918')
    for key,value in res.items():

        key=javaobj.loads(key)
        try:
            value = javaobj.loads(value)
        except:
            pass
        print(f"{key}:{value}")
#支付类型在这里对应的是一个对象，不是明文
        if key == 'paymentType':
            print(value.__getattribute__('constant'))
